// pages/movie/index.js

Page({
  /**
   * 页面的初始数据
   */
  data: {
    navList: ['热门电影', '正在上映', '即将上映'],
    title: '电影网站',
    nbLoading: false,
    movieList: [],
    opt: {
      page: 1,
      size: 5
    },
    tabIndex: 0,
    center: {
      longitude: '',
      latitude: ''
    }
  },

  imgClick(event) {
    console.log('imagClick:父组件', event.detail)
  },

  tabClick(event) {
    console.log(':父组件', event.detail)
    const { index } = event.detail
    this.setData({ tabIndex: index })
  },

  routerClick() {
    wx.navigateTo({
      url: '/pages/person/person?id=1'
      // url: '/pages/index/index',
    })
    // wx.switchTab({
    //   url: '/pages/index/index',
    // })
  },

  detailClick(e) {
    console.log('id:', e.detail)
    wx.navigateTo({
      url: `/pages/person/person?id=${e.detail.id}`
      // url: '/pages/index/index',
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    this.mapCtx = wx.createMapContext('myMap')
    console.log('this.mapCtx', this.mapCtx)
  },

  // 获取地理位置
  handleGetLocation() {
    console.log('外部this', this)
    this.mapCtx.getCenterLocation({
      success: res => {
        console.log('内部this', this)
        // web-js必包中this指向window
        // 箭头函数共享父级作用域
        console.log('longitude:', res.longitude)
        console.log('latitude:', res.latitude)
        // this.setData({
        //   center: {
        //     longitude: res.longitude,
        //     latitude: res.latitude
        //   }
        // })
      }
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.onRenderFunction({})
  },

  async onRenderFunction({ page = 1, size = 5 }) {
    const res = await this.getMovieList({ page, size })
    this.setData({ movieList: [...this.data.movieList, ...res.data.list] })
  },

  // getMovieList({page=1, size=5}, callback) {
  //   wx.request({
  //     url: 'http://localhost:3000/api/demo-json',
  //     method: 'GET',
  //     data: {
  //       page,
  //       size
  //     },
  //     success: (res) => {
  //       console.log('数据结果', )
  //       this.setData({movieList: [...this.data.movieList, ...res.data.list]})

  //       callback && callback(true)
  //     },
  //     fail: (error) => {
  //       console.log('error:', error)
  //     }
  //   })
  // },

  getMovieList({ page = 1, size = 5 }) {
    wx.showLoading({
      title: '数据请求成功'
    })
    return new Promise((resolve, reject) => {
      wx.request({
        url: 'http://localhost:3000/api/demo-json',
        method: 'GET',
        data: {
          page,
          size
        },
        success: res => {
          wx.hideLoading()
          resolve(res) // 负责成功通知，
        },
        fail: error => {
          reject(error) // 失败通知
        }
      })
    })
  },

  onPageClick() {
    this.data.opt.page++
    this.getMovieList({ page: this.data.opt.page })
    console.log('this.data.opt.page:', this.data.opt.page)
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   *
   * 1. 如何不修改请求数据函数的代码。将loading关闭
   *
   * 回调函数 - 解决异步方案
   * promise -
   *
   */
  // onPullDownRefresh() {
  //   console.log('onPullDownRefresh: 下拉刷新')
  //   this.setData({
  //     nbLoading: true
  //   })
  //   setTimeout(() => {
  //     // 调用请求数据
  //     this.getMovieList({}, (flag) => {
  //       console.log('flag:', flag)
  //       this.setData({
  //         nbLoading: false
  //       })
  //       // 关闭下拉
  //       wx.stopPullDownRefresh()
  //     })
  //   }, 2000)
  //   //
  // },

  // onPullDownRefresh() {
  //   // 1. 开启loading
  //   this.setData({
  //     nbLoading: true
  //   })
  //   // 2. 请求数据
  //   setTimeout(() => {
  //     this.getMovieList({})
  //       .then(res => {
  //         this.setData({ movieList: [...this.data.movieList, ...res.data.list] })
  //         this.setData({
  //           nbLoading: false
  //         })
  //         // 3. 关闭下拉
  //         wx.stopPullDownRefresh()
  //       }).catch(error => {})
  //   }, 2000)
  //   //
  // },

  sleep(time = 2000) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve()
      }, time)
    })
  },
  // 3 * 函数
  // 4. async 异步解决终极方案（将异步代码以同步方式输出）
  // 需求：如何解决同步代码的错误捕捉？ try catch
  async onPullDownRefresh() {
    try {
      this.setData({
        nbLoading: true
      })
      await this.sleep()
      await this.getMovieList({})
      this.setData({
        nbLoading: false
      })
      wx.stopPullDownRefresh()
    } catch (error) {
      wx.showToast({
        title: 'error'
      })
    }
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    this.data.opt.page++
    this.getMovieList({ page: this.data.opt.page })
    console.log('this.data.opt.page:', this.data.opt.page)
    console.log('onReachBottom:')
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {}
})
